package main

import (
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"

	"mcp-server/internal/types"
)

func main() {
	// 检查results目录下的所有JSON文件
	resultsDir := "results"

	err := filepath.Walk(resultsDir, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		if filepath.Ext(path) == ".json" {
			fmt.Printf("\n=== 分析结果文件: %s ===\n", path)
			analyzeResultFile(path)
		}

		return nil
	})

	if err != nil {
		fmt.Printf("遍历results目录失败: %v\n", err)
		return
	}
}

func analyzeResultFile(filePath string) {
	// 读取JSON文件
	data, err := os.ReadFile(filePath)
	if err != nil {
		fmt.Printf("读取文件失败: %v\n", err)
		return
	}

	// 解析JSON
	var results []*types.SplitResult
	if err := json.Unmarshal(data, &results); err != nil {
		fmt.Printf("解析JSON失败: %v\n", err)
		return
	}

	// 分析结果
	fmt.Printf("处理文件数量: %d\n", len(results))

	totalChunks := 0
	totalProcessTime := int64(0)
	semanticTagCount := make(map[string]int)

	for i, result := range results {
		if !result.Success {
			fmt.Printf("文件 %d 处理失败: %s\n", i+1, result.Error)
			continue
		}

		if result.Document != nil {
			fmt.Printf("\n文件 %d: %s\n", i+1, result.Document.FileName)
			fmt.Printf("  大小: %d bytes\n", result.Document.FileSize)
			fmt.Printf("  行数: %d\n", result.Document.TotalLines)
			fmt.Printf("  分片数: %d\n", result.Document.TotalChunks)
			fmt.Printf("  处理时间: %d ms\n", result.Document.ProcessTime)

			totalChunks += result.Document.TotalChunks
			totalProcessTime += result.Document.ProcessTime
		}

		// 分析语义标签
		for j, chunk := range result.Chunks {
			if chunk.SemanticTag != "" {
				semanticTagCount[chunk.SemanticTag]++
			}

			// 显示前3个分片的详细信息
			if j < 3 {
				fmt.Printf("    分片 %d: 行号 %d-%d, 大小 %d字符",
					j+1, chunk.StartLine, chunk.EndLine, len([]rune(chunk.Content)))
				if chunk.SemanticTag != "" {
					fmt.Printf(", 语义标签: %s", chunk.SemanticTag)
				}
				fmt.Println()

				// 显示内容预览
				preview := chunk.Content
				if len([]rune(preview)) > 50 {
					preview = string([]rune(preview)[:50]) + "..."
				}
				fmt.Printf("      内容: %s\n", preview)
			}
		}
	}

	// 总结统计
	fmt.Printf("\n=== 统计总结 ===\n")
	fmt.Printf("总分片数: %d\n", totalChunks)
	fmt.Printf("总处理时间: %d ms\n", totalProcessTime)
	if len(results) > 0 {
		fmt.Printf("平均处理时间: %.2f ms/文件\n", float64(totalProcessTime)/float64(len(results)))
	}

	fmt.Printf("\n语义标签统计:\n")
	for tag, count := range semanticTagCount {
		fmt.Printf("  %s: %d个\n", tag, count)
	}
}
